
#include "function.h"

// 定义全局链表
Studentlist *stuhead = NULL;

// 初始化学生链表
void initList()
{
    // 初始化头节点
    stuhead = new Studentlist; // 申请空间
    stuhead->age = 0;
    stuhead->name[0] = '\0';
    stuhead->sex[0] = '\0';
    stuhead->next = NULL; // 初始化头节点的next指针
}

// 增
void add_Student()
{
    Studentlist *p = new Studentlist;
    cout << "请输入姓名：" << endl;
    cin >> p->name;
    cout << "请输入年龄：" << endl;
    cin >> p->age;
    cout << "请输入性别：" << endl;
    cin >> p->sex;
    p->next = NULL; // 初始化新节点的next指针

    // 找到链表的最后一个节点
    Studentlist *temp = stuhead;
    while (temp->next != NULL)
    {
        temp = temp->next;
    }
    // 将新节点添加到链表的最后
    temp->next = p;
    cout << "添加成功" << endl;
}

// 删
void del_Student()
{

    char name[20];
    cout << "请输入要删除的学生姓名：" << endl;
    cin >> name;

    // 找到要删除的节点的前一个节点
    Studentlist *delnode = stuhead;
    Studentlist *temp = stuhead;
    // 循环寻找要删除的节点
    while (temp->next != NULL && strcmp(temp->next->name, name) != 0)
    {
        temp = temp->next;
    }

    // 如果找到要删除的节点
    if (temp->next != NULL)
    {
        delnode = temp->next;
        temp->next = delnode->next;
        delete delnode;
        cout << "删除成功" << endl;
    }
    else
    cout << "未找到该学生" << endl;
}

// 改
void change_Student()
{
    char name[20];
    cout << "请输入要修改的学生姓名：" << endl;
    cin >> name;

    // 找到要修改的节点
    Studentlist *temp = stuhead;
    while (temp->next != NULL && strcmp(temp->next->name, name) != 0)
    {
        temp = temp->next;
    }

    // 如果找到要修改的节点
    if (temp->next != NULL)
    {
        cout << "请输入新的姓名：" << endl;
        cin >> temp->next->name;
        cout << "请输入新的年龄：" << endl;
        cin >> temp->next->age;
        cout << "请输入新的性别：" << endl;
        cin >> temp->next->sex;
        cout << "修改成功" << endl;
    }
    else
    cout << "未找到该学生" << endl;
}

// 查
void search_Student()
{
    char name[20];
    cout << "请输入要查询的学生姓名：" << endl;
    cin >> name;

    // 找到要查询的节点
    Studentlist *temp = stuhead;
    while (temp->next != NULL && strcmp(temp->next->name, name) != 0)
    {
        temp = temp->next;
    }

    // 如果找到要查询的节点
    if (temp->next != NULL)
    {
        cout << "姓名：" << temp->next->name << " 年龄：" << temp->next->age << " 性别：" << temp->next->sex << endl;
    }
    else
    cout << "未找到该学生" << endl;
}



// 加入链表
void join_Student(Studentlist *p)
{
    // 找到链表的最后一个节点
    Studentlist *temp = stuhead;
    while (temp->next != NULL)
    {
        temp = temp->next;
    }
    // 将新节点添加到链表的最后
    temp->next = p;
    cout << "加入成功" << endl;
}



// 查看链表
void show_Student()
{
    // 遍历链表
    Studentlist *temp = stuhead->next; // 从第一个节点开始
    while (temp != NULL)
    {
        cout << "姓名：" << temp->name << " 年龄：" << temp->age << " 性别：" << temp->sex << endl;
        temp = temp->next;
    }
}
